#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
/*
	1.获取字符ASCI 码
	函数名: toascii

	头文件：<ctype.h>

	函数原型:  int toascii(int ch);

	功 能: 把一个字符转换为ASCII，其实就是把八位二进制的最高变成0  

	参数： int ch  待转换的字符

	返回值：  返回转换后的字符
	2.验证算法
	本实例的验证算法是将序列号分为4段，每段5个字符，
	每段之间以字符“-”分隔。
	计算每段所有ASCII码的和，如果
	第一段ASCII码的和模6的值为1，
	第二段ASCII码的和模8的值为1
	第三段ASCII码的和模9的值为2，
	第四段ASCII码的和模3的值为0,
	那么该序列号视为合法，否则非法。
*/
//获取第一段字符串的ASCII码和
int getysn1(char *ysn)
{
	int i;
	int num=0;
	for(i=0;i<5;i++)
	{
		num+=toascii(ysn[i]);
	}
	return num;
}
//获取第二段字符串的ASCII码和
int getysn2(char *ysn)
{
	int i;
	int num=0;
	for(i=6;i<11;i++)
	{
		num+=toascii(ysn[i]);
	}
	return num;
}
//获取第三段字符串的ASCII码和
int getysn3(char *ysn)
{
	int i;
	int num=0;
	for(i=12;i<17;i++)
	{
		num+=toascii(ysn[i]);
	}
	return num;
}
//获取第四段字符串的ASCII码和
int getysn4(char *ysn)
{
	int i;
	int num=0;
	for(i=18;i<23;i++)
	{
		num+=toascii(ysn[i]);
	}
	return num;
}

int main()
{
	char ysn[23];
	printf("please input the serial number:\n");
	scanf("%s",ysn);
	if(strlen(ysn)==23&&ysn[5]=='-'&&ysn[11]=='-'&&ysn[17]=='-')//指定位要为‘-’
	{
		if(getysn1(ysn)%6==1 &&getysn2(ysn)%8==1 &&getysn3(ysn)%9==2 &&getysn4(ysn)%3==0)
			printf("register succeed!\n");
		else
			printf("register lose!\n");
	}
	else
	{
		printf("register lose!\n");
	}
	return 0;
}
